package pro.shushi.pamirs.demo.core.install;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import pro.shushi.pamirs.boot.common.api.command.AppLifecycleCommand;
import pro.shushi.pamirs.boot.common.extend.MetaDataEditor;
import pro.shushi.pamirs.core.common.InitializationUtil;
import pro.shushi.pamirs.demo.api.DemoModule;
import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;
import pro.shushi.pamirs.meta.api.dto.meta.Meta;
import pro.shushi.pamirs.metadata.manager.core.helper.DesignerInstallHelper;

import java.util.Map;

@Slf4j
@Component
public class DemoUiMetaInstall implements MetaDataEditor {

    private static final String INSTALL_DATA_PATH = "install/demo_core_ui_meta.json";

    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
        if (!doImport()) {
            return;
        }
        log.info("准备安装【demo_core】界面元数据");
        try {
            log.info("[开始安装【demo_core】界面设计元数据]");
            InitializationUtil util = InitializationUtil.get(metaMap, DemoModule.MODULE_MODULE, DemoModule.MODULE_NAME);
            if (null != util) {
                // 设计器的元数据
                DesignerInstallHelper.mateInitialization(util, INSTALL_DATA_PATH, DemoModule.MODULE_MODULE, DemoModule.MODULE_NAME);
            }
        } catch (Exception e) {
            log.error("【demo_core】安装界面设计元数据异常", e);
        }
        log.info("完成安装【demo_core】界面元数据");
    }

    /**
     * *************************************************************
     * 【重要提示】开发环境不要执行安装，否则会把设计的页面变更成系统的页面从而导致在设计器中不能进行修改，请注意修改！！     *
     * 【重要提示】开发环境不要执行安装，否则会把设计的页面变更成系统的页面从而导致在设计器中不能进行修改，请注意修改！！     *
     * 【重要提示】开发环境不要执行安装，否则会把设计的页面变更成系统的页面从而导致在设计器中不能进行修改，请注意修改！！     *
     * *************************************************************
     */
    private boolean doImport() {
        return true;
        /**
        // ⾃定义导⼊判断. 避免⽤于设计的开发环境执⾏导⼊逻辑
        String[] envs = applicationContext.getEnvironment().getActiveProfiles();
        List<String> envList = Lists.newArrayList(envs);
        // 请过滤掉开发环境
        return CollectionUtils.isNotEmpty(envList)
                && ((envList.contains("test") || envList.contains("prod")));
         **/
    }

}